package com.dingding.service.activityservice.impl;

import java.util.List;

import com.dingding.bean.databean.request.ReqCouponInfo;
import com.dingding.bean.databean.request.ReqCouponStore;
import com.dingding.bean.databean.response.DataResponse;
import com.dingding.common.core.config.SystemCode;
import com.dingding.common.core.util.ToolUtil;
import com.dingding.facde.activity.dto.CouponStoreDTO;
import com.dingding.facde.activity.dto.ShowUserCouponDTO;
import com.dingding.facde.activity.dto.ShowUserCouponListDTO;
import com.dingding.facde.activity.dto.UserCouponInfoDTO;
import com.dingding.service.BaseService;
import com.dingding.service.activityservice.ICouponActivityService;

/**
 * @Description:优惠券活动service
 * @author fengshuonan
 * @date 2016年4月18日 下午8:13:12
 */
public class CouponActivityServiceImpl extends BaseService implements ICouponActivityService {
	
	
	/**
	 * @Title: getUserCouponList 
	 * @Description: 根据用户ID获取当前用户的所有优惠券 
	 * @param reqCouponInfo 客户端请求参数
	 * @return List<UserCoupon> 查询到的当前用户的优惠券集合
	 * @author YHQ
	 */
	@Override
	public void getUserCouponList(ReqCouponInfo reqCouponInfo, DataResponse dataResponse) {

		// 判断传入的参数是否为空
		if (reqCouponInfo == null || ToolUtil.isBlank(reqCouponInfo.getUserId())) {
			setStatus(dataResponse, SystemCode.DATA_NULL_ERROR);
			return;
		}

		// 根据用户Id获取当前用户的所有优惠券
		List<ShowUserCouponDTO> showUserCoupons = super.couponService
				.getUserCouponList(reqCouponInfo.getUserId());

		// 将获取到的优惠券信息赋值给dataResponse
		dataResponse.setResponseBody(showUserCoupons);

		setStatus(dataResponse, SystemCode.SUCCESS);
	}

	/**
	 * @Title: getUserCouponList 
	 * @Description: 根据用户ID获取当前用户的所有优惠券 
	 * @param reqCouponInfo 客户端请求参数
	 * @return List<UserCoupon> 查询到的当前用户的优惠券集合
	 * @author YHQ
	 */
	@Override
	public void getUserCoupons(ReqCouponInfo reqCouponInfo, DataResponse dataResponse) {

		// 判断传入的参数是否为空
		if (reqCouponInfo == null || ToolUtil.isBlank(reqCouponInfo.getUserId())) {
			setStatus(dataResponse, SystemCode.DATA_NULL_ERROR);
			return;
		}

		// 根据用户Id获取当前用户的所有优惠券
		List<ShowUserCouponListDTO> showUserCoupons = super.couponService
				.getUserCoupons(reqCouponInfo.getUserId());

		// 将获取到的优惠券信息赋值给dataResponse
		dataResponse.setResponseBody(showUserCoupons);

		setStatus(dataResponse, SystemCode.SUCCESS);
	}
	
	/**
	 * @Title: getUserCouponInfo 
	 * @Description: 根据用户ID获取优惠券详细信息
	 * 主要包括：规则、有效期、金额
	 * @param reqCouponInfo 客户端请求参数
	 * @return UserCouponInfoDTO 用户详情
	 * @author YHQ
	 */
	@Override
	public void getUserCouponInfo(ReqCouponInfo reqCouponInfo, DataResponse dataResponse) {

		// 判断传入的参数是否为空
		if (reqCouponInfo == null || ToolUtil.isBlank(reqCouponInfo.getUserCouponId())) {
			setStatus(dataResponse, SystemCode.DATA_NULL_ERROR);
			return;
		}

		// 根据用户Id获取优惠券详情信息
		UserCouponInfoDTO userCouponInfoDTO = super.couponService
				.getUserCouponInfo(reqCouponInfo.getUserCouponId());

		// 将获取到的优惠券信息赋值给dataResponse
		dataResponse.setResponseBody(userCouponInfoDTO);

		setStatus(dataResponse, SystemCode.SUCCESS);

	}

	/**
	 * @Title: activateCoupon 
	 * @Description: 激活优惠券
	 * @param reqCouponInfo 客户端请求参数
	 * @return boolean  true 激活成功  false 激活失败
	 * @author YHQ
	 */
	@Override
	public void activateCoupon(ReqCouponInfo reqCouponInfo, DataResponse dataResponse) {

		// 判断传入的参数是否为空
		if (reqCouponInfo == null || ToolUtil.isBlank(reqCouponInfo.getUserCouponId())) {
			setStatus(dataResponse, SystemCode.DATA_NULL_ERROR);
			return;
		}

		// 激活优惠券信息
		boolean flag = super.couponService.activateCoupon(reqCouponInfo.getUserCouponId());

		if (flag) { // 激活成功
			setStatus(dataResponse, SystemCode.SUCCESS);
		} else { // 激活失败
			setStatus(dataResponse, SystemCode.COUPON_ACTIVATION_FAIL);
		}

	}

	/**
	 * @Title: getCouponStores 
	 * @Description: 根据城市名称获取门店列表
	 * @param reqCouponStore 客户端请求参数
	 * @param dataResponse 
	 * @author YHQ
	 * @return void
	 * @throws
	 */
	@Override
	public void getCouponStores(ReqCouponStore reqCouponStore, DataResponse dataResponse) {

		// 判断传入参数是否为空
		if (reqCouponStore == null || ToolUtil.isBlank(reqCouponStore.getCityName())) {
			setStatus(dataResponse, SystemCode.DATA_NULL_ERROR);
			return;
		}

		// 根据城市名称获取门店列表
		List<CouponStoreDTO> couponStoreDTOs = super.couponService
				.geCouponStoreDTOs(reqCouponStore.getCityName());

		// 将获取到的优惠券信息赋值给dataResponse
		dataResponse.setResponseBody(couponStoreDTOs);

		setStatus(dataResponse, SystemCode.STORE_LOAG_NULL);

	}

	@Override
	public void setStatus(DataResponse dataResponse, int status) {

		String message = null;
		switch (status) {
		case SystemCode.SUCCESS:
			message = SystemCode.SUCCESS_MESSAGE;
			break;
		case SystemCode.ERROR:
			message = SystemCode.ERROR_MESSAGE;
			break;
		case SystemCode.USER_INFO_NOT_EXIST_ERROR: // 用户信息不存在
			message = SystemCode.USER_INFO_NOT_EXIST_MESSAGE;
			break;
		case SystemCode.CANCEL_ORDER_TOO_MUCH: // 取消次数超过三次
			message = SystemCode.CANCEL_ORDER_MUCH_MESSAGE;
			break;
		case SystemCode.PUBLISH_ORDER_TOO_MUCH: // 接单次数超过三次
			message = SystemCode.PUBLISH_ORDER_TOO_MUCH_MESSAGE;
			break;
		case SystemCode.DATA_NULL_ERROR: // 请求数据为空
			message = SystemCode.DATA_NULL_MESSAGE;
			break;
		case SystemCode.COUPON_ACTIVATION_FAIL:
			message = SystemCode.COUPON_ACTIVATION_FAIL_MESSAGE;// 优惠券激活失败
			break;
		case SystemCode.STORE_LOAG_NULL:
			message = SystemCode.STORE_LOAD_NULL_MESSAGE;// 使用优惠券失败
			break;
		default:
			break;
		}
		dataResponse.setResponseCode(status);
		dataResponse.setResponseMessage(message);
	}

}
